package com.zenithmind.coding.service;

import com.zenithmind.coding.pojo.vo.ProblemVO;

import java.util.List;

/**
 * 问题推荐服务接口 - 遵循接口隔离原则，专门处理问题推荐相关功能
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface ProblemRecommendationService {

    /**
     * 查询推荐问题
     * 
     * @param userId 用户ID
     * @param difficulty 难度等级
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getRecommendProblems(String userId, Integer difficulty, Integer limit);

    /**
     * 查询热门问题
     * 
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getHotProblems(Integer limit);

    /**
     * 查询相关问题
     * 
     * @param problemId 问题ID
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getRelatedProblems(String problemId, Integer limit);

    /**
     * 根据标签查询问题
     * 
     * @param tags 标签列表
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getProblemsByTags(List<String> tags, Integer limit);

    /**
     * 搜索问题
     * 
     * @param keyword 关键词
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> searchProblems(String keyword, Integer limit);

    /**
     * 获取每日挑战问题
     * 
     * @param userId 用户ID
     * @param count 数量
     * @return 问题列表
     */
    List<ProblemVO> getDailyChallenges(String userId, Integer count);

    /**
     * 获取个性化学习路径
     * 
     * @param userId 用户ID
     * @param pathLength 路径长度
     * @return 问题列表
     */
    List<ProblemVO> getLearningPath(String userId, Integer pathLength);

    /**
     * 获取弱项强化问题
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getWeaknessReinforcementProblems(String userId, Integer limit);

    /**
     * 获取同级别推荐
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getLevelMatchedProblems(String userId, Integer limit);

    /**
     * 获取进阶挑战
     * 
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 问题列表
     */
    List<ProblemVO> getAdvancedChallenges(String userId, Integer limit);
}
